package com.le.tester.book.effectivejava3rdchinese.articlesix;

import java.util.regex.Pattern;

/**
 * createTime：2022/7/30 16:19
 * description：避免创建不必要的对象，尽量使得创建的对象复用，使用静态的工厂方法可以更好避免创建不必要的对象，
 * 对于重量级别的对象，才应该避免反复的创建（清晰的了解哪些属于重量级对象）
 */
public class RomanNumbers {

    private static final Pattern ROMAN = Pattern.compile("^(?=.)M*(C[MD]|D?C{0,3})" + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");


    //不适用，创建昂贵的实例对象，回收困难
    public boolean isRomanNumber(String word) {
        //使用正则表达式都会创建昂贵的pattern实例对象
        return word.matches("^(?=.)M*(C[MD]|D?C{0,3})" + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");

        //静态的创建Pattern

    }

    static boolean isRomanNumbers(String word) {

        return ROMAN.matcher(word).matches();

    }


}
